<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Object.create</title>
</head>
<body>
    <script>
        //声明一个对象
        var car = {
            name:'汽车',
            run:function(){
                console.log('i can run');
            }
        }
        
        //创建一个新对象 要以 obj 作为原型对象
        // 使用类名调用的方法：静态方法
        // var obj = Object.create(car);
        // console.log(obj);
        // obj.run();
        // obj.__proto__

        // 属性配置参数
        // var obj = Object.create(car,{
        //     color:{
        //         value:'white',
        //         //可写的
        //         writable:true,
        //         configurable:true,
        //         //可枚举
        //         enumerable:true
        //     }
        // })
        // obj.color = 'black';
        // delete obj.color;
        // console.log(obj);
        // 遍历 for... in 循环可以遍历原型上的方法和属性
        // 对象私有属性  对象.hasOwnProperty(属性名)  如果是私有属性 true 不是私有属性 false 
        //  has 有 
        //  Own 自己的
        //  Property 属性
        // for(var attr in obj){
        //     if(obj.hasOwnProperty(attr)){
        //         console.log(attr);
        //     }
        // }

        // getter setter
        
        var obj = Object.create(car,{
            _color:{
                value:null,
                writable:true
            },
            color:{
                // getter  和 setter 不能与value 一起使用
                get:function(){
                    return this._color;
                },
                // set执行时机：改变color属性值的时候，执行
                set:function(val){
                    // this.color = val;
                    // 设置 color的属性值
                    // console.log('set 执行了' + val);

                    this._color = val;
                }
            }
        });

        console.log(obj.color);
        obj.color = '#666';
        console.log(obj.color);


        var person = {
            name:'atguigu'
        }

        //

        var p1 = Object.create(person,{
            _sex:{
                value:null,
                writable:true
            },
            sex:{
                get:function(){
                    return this._sex;
                },
                set:function(val){
                    if(val === 1){
                        this._sex = 'male';
                    }else if(val === 0){
                        this._sex = 'female';
                    }else{
                        console.log('数据类型错误');
                    }
                }
            }
        })

        p1.sex = '男';// 1 male  0 female
        // p1.sex
        console.log(p1.sex);// male  female
    
    </script>
</body>
</html>